/*
 * Kmeans.h
 *
 *  Created on: 17/11/2013
 *      Author: juanignacio
 */

#ifndef KMEANS_H_
#define KMEANS_H_
#include <iostream>
#include <stdio.h>
#include <string.h>


using namespace std;

class Kmeans {
public:
	Kmeans();
	Kmeans(int valor, int dimension);
	Kmeans(int k);
	virtual ~Kmeans();
	int crearCentroides();
	int crearCentroides(float *minimo, float *maximo);
	long int getOffset(int unCentroide);
	void getCentroide(long int offset, float *unCentroide);
	void getCentroideConRadio(long int offset, float *unCentroide, float *radio);
	int setCentroide(int numeroCentroide, float *unCentroide);
	int setCentroideConRadio(int numeroCentroide, float *unCentroide, float *radio);
	void parsearDirectorio(char *unDirectorio);
	void getDocumentosMasAlejados(float *unDocumento, float *otroDocumento);
	void asignarCluster(float *unDocumento, int *numeroDoc, FILE *documentos); //devuelve el valor del cluster mas cercano
	void reorganizarCentroides(int k);
	void getNombreDocumento(int unDocumento);
	void emitirResultados();

	/*Este metodo trabaja directamente con el arbol de lexico.
	 * PRE: El directorio tiene que estar parseado previamente
	 * Recibe unVector de referencia y guarda en unResultado el vector
	 * del lexico que mas se aproxima*/
	void obtenerVectorMasCercano(float *unVector, float *unResultado);

private:
	int k;
	int dimension;
	abb::ArbolB<Termino,40> *lexico;
	Parser unParser;
	long int *offset;
	long int eof;
	int *vectoresCategorizados;


};

#endif /* KMEANS_H_ */
